Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>JSON-RPC</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/JSON-RPC"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-JSON-RPC rootpage-JSON-RPC skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">JSON-RPC</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>JSON-RPC</b> (<a href="JavaScript_Object_Notation" class="mw-redirect" title="JavaScript Object Notation">JavaScript Object Notation</a> <a href="Remote_Procedure_Call" title="Remote Procedure Call">Remote Procedure Call</a>) ist ein Protokoll zum Aufruf von <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methoden</a> in <a href="Verteiltes_System" title="Verteiltes System">entfernten Computersystemen</a>, ähnlich wie <a href="XML-RPC" title="XML-RPC">XML-RPC</a> (die Daten werden jedoch in <a href="JavaScript_Object_Notation" class="mw-redirect" title="JavaScript Object Notation">JSON</a> statt in <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a> gesendet).
Bei der Spezifikation wurde darauf geachtet, dass JSON-RPC möglichst keine unnötige Komplexität enthält und über verschiedene <a href="Kommunikationsprotokoll" title="Kommunikationsprotokoll">Kommunikationsprotokolle</a> genutzt werden kann. Dadurch kann es sehr flexibel eingesetzt werden. Zudem unterstützt das Protokoll
<a href="Asynchrone_Kommunikation" title="Asynchrone Kommunikation">asynchrone Kommunikation</a>, da alle Anfragen und Antworten eine ID enthalten, was eine einfache Zuordnung von Antworten zu den entsprechenden Anfragen ermöglicht.
</p><p>JSON-RPC 1.0 erlaubt Anfragen in beide Richtungen (<a href="Peer-to-Peer" title="Peer-to-Peer">Peer-to-Peer</a>), die meisten JSON-RPC 1.0 Implementierungen unterstützen jedoch standardmäßig nur eine Richtung (<a href="Client-Server-Modell" title="Client-Server-Modell">Client-Server-Modell</a>).
</p><p>JSON-RPC 2.0 verwendet ein <a href="Client-Server-Modell" title="Client-Server-Modell">Client-Server-Modell</a>. Anfragen in beide Richtungen sind möglich, indem auf beiden Seiten ein JSON-RPC-Server verwendet wird.
</p>

<div class="mw-heading mw-heading2"><h2 id="Funktionsweise">Funktionsweise</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Anfrage">Anfrage</h3></div>
<p>Ein JSON-RPC-Call besteht aus einem <a href="JavaScript_Object_Notation#Datenstruktur_und_Formatdefinition" class="mw-redirect" title="JavaScript Object Notation">JSON-Objekt</a>, das vom <a href="Client" title="Client">Client</a> an einen <a href="Server" title="Server">Server</a> geschickt wird. Mögliche Anfragetypen sind
</p>
<ul><li>Request (englisch für: „Anfrage“): Der Server soll eine Antwort liefern.</li>
<li>Notification (englisch für: „Benachrichtigung“): Einwegkommunikation, vom Server wird keine Antwort erwartet.</li>
<li>Batch Request (englisch für: „Stapelanfrage“): Mehrere Anfragen (<i>Notifications</i> oder <i>Requests</i>) werden zusammengefasst als JSON-Array gesendet, dessen Elemente dann die einzelnen Request-Objekte sind. (Verfügbar ab Version 2.0)</li></ul>
<p>In der folgenden Tabelle sind die Bestandteile eines Request-Objekts aufgelistet.
</p>
<table class="wikitable">

<tbody><tr>
<th>Bestandteil
</th>
<th>Beschreibung
</th>
<th>Bemerkung
</th></tr>
<tr>
<td><code>jsonrpc</code>
</td>
<td>Ein String mit dem Namen der JSON-RPC-Version ("2.0")
</td>
<td>Ab Version 2.0
</td></tr>
<tr>
<td><code>method</code>
</td>
<td>Ein String mit dem Namen der Funktion, die aufgerufen werden soll.
</td>
<td>
</td></tr>
<tr>
<td><code>params</code>
</td>
<td>Ein Array oder Objekt mit den Parametern, die der Funktion übergeben werden sollen.
</td>
<td>Objekt ab Version 2.0 möglich
</td></tr>
<tr>
<td><code>id</code>
</td>
<td>Ein eindeutiger Identifikator für die Nachricht. Kann jeden beliebigen <a href="Datentyp" title="Datentyp">Datentyp</a> haben (i. d. R. Integer).
</td>
<td>
</td></tr></tbody></table>
<p>Eine Notification zeichnet sich dadurch aus, dass:
</p>
<ul><li>JSON-RPC Version 2.0: <code>id</code> fehlt</li>
<li>JSON-RPC Version 1.0: <code>id</code> <code>null</code> ist</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Antwort">Antwort</h3></div>
<p>Im Fall eines Requests schickt der Server nach der Ausführung der angeforderten Methode eine Antwort als JSON-Objekt zurück an den Client. Die Bestandteile eines Response-Objektes sind in der folgenden Tabelle aufgelistet.
</p>
<table class="wikitable">

<tbody><tr>
<th>Bestandteile
</th>
<th>Beschreibung
</th>
<th>Bemerkung
</th></tr>
<tr>
<td><code>jsonrpc</code>
</td>
<td>Ein String mit dem Namen der JSON-RPC-Version („2.0“)
</td>
<td>Ab Version 2.0
</td></tr>
<tr>
<td><code>result</code>
</td>
<td>Das Rückgabeobjekt der Funktion, falls kein RPC-Fehler auftrat. Andernfalls:
<ul><li>Version 2.0: wird dieses Feld weggelassen.</li>
<li>Version 1.0: hat dieses Feld den Wert <code>null</code>.</li></ul>
</td>
<td>
</td></tr>
<tr>
<td><code>error</code>
</td>
<td>Das Fehlerobjekt, falls ein RPC-Fehler auftrat. Andernfalls:
<ul><li>Version 2.0: wird dieses Feld weggelassen.</li>
<li>Version 1.0: hat dieses Feld den Wert <code>null</code>.</li></ul>
</td>
<td>
</td></tr>
<tr>
<td><code>id</code>
</td>
<td>Enthält den gleichen Wert wie <code>id</code> des Requests, der diese Response verursacht hat.
</td>
<td>
</td></tr></tbody></table>
<p>Erhält der Server eine Notification, führt er die angegebene Methode aus, sendet jedoch keine Antwort.
Erhält er einen Batch-Request, führt er die aufgelisteten Methoden aus, und sendet eine Batch-Response (d.&nbsp;h. die Antworten auf alle Requests im Batch-Request in einer Nachricht).
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiele">Beispiele</h2></div>
<p>In diesen Beispielen steht <code>--&gt;</code> für eine Nachricht vom Client an der Server, und <code>&lt;--</code> umgekehrt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Version_2.0">Version 2.0</h3></div>
<p>Ein einfaches Beispiel mit einer Anfrage und einer Antwort:
</p>
<code><pre>--&gt; { "jsonrpc": "2.0", "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
&lt;-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 1}
</pre></code>
<p>Gleiches Beispiel mit "named parameters":
</p>
<code><pre>--&gt; { "jsonrpc": "2.0", "method": "gibAus", "params": {"Nachricht": "Hallo JSON-RPC"}, "id": 2}
&lt;-- { "jsonrpc": "2.0", "result": "Hallo JSON-RPC", "id": 2}
</pre></code>
<p>Weitere Beispiele finden sich am Ende der JSON-RPC 2.0 Spezifikation.
</p>
<div class="mw-heading mw-heading3"><h3 id="Version_1.0">Version 1.0</h3></div>
<p>Ein einfaches Beispiel mit einer Anfrage und einer Antwort
</p>
<pre>--&gt; { "method": "gibAus", "params": ["Hallo JSON-RPC"], "id": 1}
&lt;-- { "result": "Hallo JSON-RPC", "error": null, "id": 1}
</pre>
<p>Dieses Beispiel zeigt einen Teil der Kommunikation in einer Chat-Anwendung. Der Chat-Dienst sendet eine <i>Notification</i> für jede Nachricht, die der Client erhalten soll. Der Client sendet einen <i>Request</i>, um eine Nachricht zu senden und erwartet eine positive Rückmeldung, um zu wissen, dass die Nachricht veröffentlicht wurde.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<pre>...
--&gt; {"method": "veröffentlicheNachricht", "params": ["Hallo an alle!"], "id": 99}
&lt;-- {"result": 1, "error": null, "id": 99}
&lt;-- {"method": "empfangeNachricht", "params": ["Benutzer1", "Wir unterhielten uns gerade"], "id": null}
&lt;-- {"method": "empfangeNachricht", "params": ["Benutzer3", "Ich muss jetzt los, tschüss"], "id": null}
--&gt; {"method": "veröffentlicheNachricht", "params": ["Ich habe eine Frage!"], "id": 101}
&lt;-- {"method": "ändereStatus", "params": ["abwesend","Benutzer3"], "id": null}
&lt;-- {"result": 1, "error": null, "id": 101}
...
</pre>
<div class="mw-heading mw-heading2"><h2 id="Versionsgeschichte">Versionsgeschichte</h2></div>
<p>Die erste Version vom JSON-RPC stammt von 2005. Die Version 2.0 wurde 2010 verabschiedet.
</p>
<table class="wikitable">

<tbody><tr>
<th>Version
</th>
<th>Beschreibung
</th>
<th>Datum
</th></tr>
<tr>
<td>1.0
</td>
<td>Original-Version<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</td>
<td>2005
</td></tr>
<tr>
<td>Entwurf „1.1 WD“
</td>
<td>Auf HTTP eingeschränkt, benannte Parameter, spezifische Fehlercodes und introspektive Funktionen hinzugefügt.
</td>
<td>07.08.2006
</td></tr>
<tr>
<td>Entwurf „1.1 Alt“
</td>
<td>Alternativer (vereinfachter) Vorschlag für 1.1 WD.
</td>
<td>06.05.2007
</td></tr>
<tr>
<td>Entwurf „1.2“
</td>
<td>Leicht modifizierte Variante von 1.1 Alt. Eine spätere Version wurde in 2.0 umbenannt.
</td>
<td>27.12.2007
</td></tr>
<tr>
<td>2.0
</td>
<td>aktuelle Spezifikation<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</td>
<td>2010
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Implementierungen">Implementierungen</h2></div>
<p>JSON-RPC wurde in verschiedenen Programmiersprachen implementiert, darunter <a href="JavaScript" title="JavaScript">JavaScript</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, <a href="C-Sharp" title="C-Sharp">C#</a>, <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>, <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a> und <a href="PHP" title="PHP">PHP</a>. Da JSON aus Unicode-Zeichen besteht, kann JSON-RPC jedoch auch in anderen Programmiersprachen relativ einfach implementiert werden.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Verbreitung">Verbreitung</h2></div>
<p>Wo überall JSON-RPC eingesetzt wird, ist in der Öffentlichkeit selten ein Thema. Google hat am 31. Juli 2019 verkündet, dass ab dem 12. August 2020 für den Zugriff auf die Google-APIs statt JSON-RPC nur noch <a href="Representational_State_Transfer" title="Representational State Transfer">REST</a> verwendet werden kann.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://jsonrpc.org/">Die offizielle JSON-RPC Website</a></li>
<li><a rel="nofollow" class="external text" href="https://groups.google.com/group/json-rpc">JSON-RPC-Google Group</a> diskutiert Themen rund um JSON-RPC.</li>
<li><a rel="nofollow" class="external text" href="http://www.simple-is-better.org/json-rpc/">JSON-RPC Spezifikationen, Links usw.</a> simple-is-better.org</li>
<li><a rel="nofollow" class="external text" href="http://json-rpc.org/">Die offizielle JSON-RPC 1.0 Website</a> enthält unter anderem eine Liste der verfügbaren JSON-RPC 1.0 Implementierungen (veraltet).</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */


.mw-parser-output .webarchiv-memento a{color:inherit}


/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080517011921/http://json-rpc.org/wiki/specification">specification – JSON-RPC – Trac.</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> des <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fjson-rpc.org%2Fwiki%2Fspecification">Originals</a></span> vom 17. Mai 2008 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) <small class="archiv-bot"><span class="wp_boppel noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"><span title="i"></span></span></span>&nbsp;<b>Info:</b> Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.</small><span style="display:none"><a rel="nofollow" class="external text" href="http://IABotmemento.invalid/http://json-rpc.org/wiki/specification">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://json-rpc.org/wiki/specification">@2</a></span><span style="display:none">Vorlage:Webachiv/IABot/json-rpc.org</span> json-rpc.org</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080517011921/http://json-rpc.org/wiki/specification">json-rpc.org</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> des <span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fjson-rpc.org%2Fwiki%2Fspecification">Originals</a></span> vom 17. Mai 2008 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) <small class="archiv-bot"><span class="wp_boppel noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"><span title="i"></span></span></span>&nbsp;<b>Info:</b> Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.</small><span style="display:none"><a rel="nofollow" class="external text" href="http://IABotmemento.invalid/http://json-rpc.org/wiki/specification">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://json-rpc.org/wiki/specification">@2</a></span><span style="display:none">Vorlage:Webachiv/IABot/json-rpc.org</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.simple-is-better.org/json-rpc/jsonrpc20.html">simple-is-better.org</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc4627" class="extiw external" title="rfc:4627">4627</a></span></i>&nbsp;– <i><span lang="en">application/json</span></i>. (englisch).</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite">Rainald Menge-Sonnentag: <a rel="nofollow" class="external text" href="https://www.heise.de/developer/meldung/Google-schickt-JSON-RPC-Zugriff-in-Rente-4487087.html"><i>Google schickt JSON-RPC-Zugriff in Rente.</i></a> In: <i>heise online.</i> 2.&nbsp;August 2019,<span class="Abrufdatum"> abgerufen am 4.&nbsp;August 2019</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJSON-RPC&amp;rft.title=Google+schickt+JSON-RPC-Zugriff+in+Rente&amp;rft.description=Google+schickt+JSON-RPC-Zugriff+in+Rente&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fmeldung%2FGoogle-schickt-JSON-RPC-Zugriff-in-Rente-4487087.html&amp;rft.creator=Rainald+Menge-Sonnentag&amp;rft.date=2019-08-02">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-10-05" href="https://de.wikipedia.org/wiki/?title=JSON-RPC&amp;oldid=237912169">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>